/******************************************************************************
 * Copyright (C) 2011 ShenZhen ComTop Information Technology Co.,Ltd
 * All Rights Reserved.
 * 本软件为深圳康拓普开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、
 * 复制、修改或发布本软件.
 *****************************************************************************/

package com.code.common.excel.officeexport.excel.tag;

import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;

import com.code.common.excel.officeexport.excel.exception.ExportExcelException;

/**
 * "object" 标签处理类.
 * 
 * @author 李广
 * @since 1.0
 * @version 2005-1-26 李广 新建
 */
public class TageObject implements ITageDeal {
    
    /** 日志管理类对象 */
    private final Logger loger = Logger.getLogger(TageObject.class);
    
    /**
     * 构造函数
     */
    public TageObject() {
        
    }
    
    /**
     * 实现 ITageDeal 接口中的方法,处理excel指定sheet中的"object"标签.
     * 
     * @param sheet excel中指定的sheet
     * @param dataSource 数据源
     * @param alTages 所有的标签信息.
     */
    public void setValue(HSSFSheet sheet, Map<String, Object> dataSource, List<ExcelCell> alTages) {
        int iTagesSize = alTages.size();
        ExcelCell objExcelCell;
        String strTag;
        String strName;
        String strMethod;
        HSSFCell objCell;
        
        for (int i = 0; i < iTagesSize; i++) {
            objExcelCell = alTages.get(i);
            objCell = sheet.getRow(objExcelCell.getRowno()).getCell(objExcelCell.getCellno());
            strTag = objExcelCell.getTagStr();
            // objCell.setEncoding(HSSFCell.ENCODING_UTF_16);
            strName = ExcelUtil.getKeyWord(strTag, "name");
            strMethod = ExcelUtil.getKeyWord(strTag, "method");
            Object objVal = dataSource.get(strName);
            if (objVal != null) {
                try {
                    Object objValue = ExcelUtil.getValue(objVal, strMethod);
                    
                    if (objValue == null) {
                        objCell.setCellValue("");
                    } else {
                        objCell.setCellValue(objValue.toString());
                    }
                } catch (ExportExcelException ex) {
                    loger.error(ex.toString(), ex);
                }
            } else {
                objCell.setCellValue("");
            }
        }
    }
    
}
